// 导入模块
import Request from 'luch-request'
import { useUserStore } from '../stores/user'
//配置接口白名单 如果这几个接口携带Token的话,就会出现错误
const whiteList = ['/code', '/login', '/login/password']

// 实例化网络请求
const request = new Request({
	// 接口基地址
	baseURL: 'https://consult-api.itheima.net',
	custom: {
		loading: true,
	},
})

// 请求拦截器
request.interceptors.request.use(
	(config) => {
		if (config.custom?.loading) {
			uni.showLoading({ title: '正在加载...', mask: true })
		}
		//拿到持久化的token，然后将其添加到请求头上面
		//如果token存在，而且请求的地址不在白名单里，就将token配置在请求头上
		const store = useUserStore()
		if (store.token && !whiteList.includes(config.url)) {
			config.header!.Authorization = `Bearer ${store.token}`
		}

		return config
	},
	(error) => {
		return Promise.reject(error)
	}
)

// 配置响应拦截器
request.interceptors.response.use(
	(res) => {
		// 隐藏加载状态提示
		uni.hideLoading()

		// 统一错误处理
		if (res.data.code !== 10000) {
			uni.showToast({
				title: res.data.message,
				icon: 'none',
			})
			return Promise.reject(res.data)
		}
		// 简化数据返回
		return res.data?.data
	},
	(error) => {
		// 隐藏加载状态提示
		uni.hideLoading()

		if (error.data.code === 401) {
			uni.showToast({
				title: error.data.message,
				icon: 'none',
			})
			//跳转到登录页
			uni.redirectTo({
				url: `/pages/login/login`,
			})
			const store = useUserStore()
			//清空Token,从新登录
			store.token = ''
		}
		return Promise.reject(error)
	}
)

// 导出配置好的模网络模块
export { request }
